package com.huixinpn.dionysus; import java.io.Serializable; import java.util.Set; import javax.persistence.Entity; import javax.persistence.metamodel.EntityType; import javax.persistence.metamodel.Metamodel; import org.junit.Assert; import org.junit.Test; import org.reflections.Reflections; import com.huixinpn.dionysus.domain.InvalidEntity; /** * https://hibernate.atlassian.net/browse/HHH-6896 * * Because of above issue, the entity ID cannot be detect when its parent class * is generic with extends like: * * <code> * class AbstractPersistable<PK extends Serializable> implements Persistable<PK> * * class Article extends AbstractPersistable<Long> * </code> * * In this kind of situation, Hibernate will calculate its "id" data type as * "java.io.Serializable" which may cause error in spring-data-rest */ public class EntityIDTest extends AbstractPersistentTest { @Test public void makeSureEntityIDCanbeDetect() { Metamodel model = entityManager.getMetamodel(); final Reflections reflections = new Reflections(EntityIDTest.class.getPackage().getName()); Set<Class<?>> entities = reflections.getTypesAnnotatedWith(Entity.class); for (Class<?> entity : entities) { EntityType<?> entityType = model.entity(entity); Class<?> id = entityType.getIdType().getJavaType(); System.out.println(entityType); if (entity.equals(InvalidEntity.class)) { Assert.assertEquals(id, Serializable.class); } else { Assert.assertNotEquals(id, Serializable.class); } } } }